#include "RegistroIndice.h"
#include "../common/SerialInator.h"


RegistroIndice::RegistroIndice() : _posHijo(-1)
{
	this->clavePrimaria = "";
}

RegistroIndice::RegistroIndice(std::string clave, int posHijo) :
		_posHijo(posHijo)
{
	this->clavePrimaria = clave;
}


RegistroIndice::~RegistroIndice(){
	this->_posHijo = -1;
}


RegistroIndice::RegistroIndice(const IRegistro& r){
	this->clavePrimaria = r.getClave();

	// Cuidado con esto para que no quede recursivo
	this->_posHijo = static_cast<const RegistroIndice*>(&r)->getPosHijo();
}


int RegistroIndice::serializar(char* arrBytes){
	SerialInator s;
	s.reset();

	// Una marca para separar los registros, es para debug
	s.serializar(arrBytes, '|');
	s.serializar(arrBytes, this->clavePrimaria);
	s.serializar(arrBytes, this->_posHijo);

	return s.getBufferSize();
}


int RegistroIndice::desSerializar(char* arrBytes){
	SerialInator s;
	s.reset();

	char pipe = '|';	// Una marca para separar los registros, para debug
	s.desSerializar(arrBytes, pipe);
	s.desSerializar(arrBytes, this->clavePrimaria);
	s.desSerializar(arrBytes, this->_posHijo);

	return s.getBufferSize();
}


int RegistroIndice::getSize() const{
	int tam = sizeof(char);	// Marca para debug
	tam += SerialInator::getSizeOf(this->clavePrimaria);
	tam += sizeof(this->_posHijo);

	return tam;
}


int RegistroIndice::getPosHijo() const {
	return this->_posHijo;
}


void RegistroIndice::setPosHijo(int posHijo){
	this->_posHijo = posHijo;
}


void RegistroIndice::ImprimirEn(std::ostream& out) const{
	out << "|(" << this->clavePrimaria.length() << ")"
			<< this->clavePrimaria
			<< "[" << this->_posHijo << "]";
}
